package com.yiwyn;

import com.yiwyn.domain.Animal;
import com.yiwyn.domain.Cat;
import com.yiwyn.domain.Dog;

import java.util.ArrayList;
import java.util.List;

public class PECSDemo {

    public static void main(String[] args) {
//        animalDeal(new Cat());
        Cat cat = new Cat();
        Animal animalcat = (Animal) cat;
        System.out.println(animalcat);


        Animal a  = new Animal();
        Cat cat1 = (Cat) a;
        System.out.println(cat1);

    }

    public static void animalDeal(Animal animal) {
        // 这段代码可以正常执行，在使用super的情况下，对象可以正常进行消费行为
        List<? super Animal> animals = new ArrayList<>();
        animals.add(animal);



        // ========================= 华丽的分割线 ===========================

        // 这段代码会报错，在使用extends的场景中，对象不允许进行消费行为
        List<? extends Animal> animalsExt = new ArrayList<>();
//        animalsExt.add(animal);

        // 这段代码使用 animalsExt,animalsExt作为生产者，是可以正常遍历animal元素的，符合producer
        for (Animal animal1 : animalsExt) {
            animal1.call();
        }
    }

}
